#include<conio.h>
#include<stdio.h>
#include<string.h>
#include "lexico.h"

int main(int argc, char *argv[])
{
 char NombreArchivo[255];
 FILE *ArchivoFuente;
 FILE *ArchivoTokens;
 FILE *ArchivoDebug;
 
 NombreArchivo[0]='\0'; 
  
 /*Sino se le pasa un funte por parametro le forzamos que levante uno por defecto*/  
 if(argc == 1)
 {       
  printf("Usando el archivo por defecto\n");
  strcat(NombreArchivo, "pruebaParentesis.nc");
 }
 else
  strcat(NombreArchivo, argv[1]);     

 // Abrimos el archivo en solo lectura.
 ArchivoFuente = fopen(NombreArchivo,"r");
 
 if((ArchivoFuente == NULL) || (ArchivoFuente == 0))
  printf("No se pudo abrir el archivo: %s\n", NombreArchivo);
 else
 {
     // Crea un archivo llamado NombreArchivo+Tokens --> Ej. prueba.ncTokens
     ArchivoTokens = fopen( strcat( NombreArchivo, "Tokens" ), "w" );
     if((ArchivoTokens == NULL) || (ArchivoTokens == 0))
      printf("No se pudo crear el archivo de tokens: %s\n", strcat(NombreArchivo, "Tokens"));
     else
     {
         // Crea un archivo llamado NombreArchivo+Debug --> Ej. prueba.ncTokensDebug
         ArchivoDebug = fopen(strcat(NombreArchivo, "Debug"),"w");
         if((ArchivoDebug == NULL) || (ArchivoDebug == 0))
          printf("No se pudo crear el archivo de tokens: %s\n", strcat(NombreArchivo, "Debug"));
         else
         {
              // Configura el yylex para comenzar a trabajar
              ConfigurarLex( ArchivoFuente, ArchivoTokens, ArchivoDebug);
              
              // Ejecuta el yylex para obtener la lista de tokens a procesar.
              yylex();
              
              // Finaliza el proceso y cierra los archivos del lexico.
              fclose(ArchivoDebug);
              fclose(ArchivoTokens);
              fclose(ArchivoFuente);
              
              // Muestra la lista de tokens por pantalla.
              MostrarLista();
         }
     }    
 } 
 printf("Termino el Compilador\n");
// getche();
 system("PAUSE");
 return 0;
}
